package lr.com.demo.dao.impl;

import java.io.Serializable;

import lr.com.demo.dao.IUserDao;
import lr.com.demo.entity.User;

import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;

public class UserDaoImpl implements IUserDao {
	private RedisTemplate<Serializable, Serializable> redisTemplate;
	public void setRedisTemplate(
			RedisTemplate<Serializable, Serializable> redisTemplate) {
		this.redisTemplate = redisTemplate;
	}

	/**
	 * TODO
	 * @Author	李瑞
	 * @param user 
	 * @Date	2016年6月23日
	 * 更新日志
	 * 2016年6月23日 李瑞  首次创建
	 *
	 */
    public void saveUser(final User user) {
        redisTemplate.execute(new RedisCallback<Object>() {
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()),
                               redisTemplate.getStringSerializer().serialize("name"));
                return null;
            }
        });
    }

    /**
	 * @Author	李瑞
	 * @param id
	 * @return 
	 * @Date	2016年6月23日
	 * 更新日志
	 * 2016年6月23日 李瑞  首次创建
	 *
	 */
    public User getUser(final String id) {
        return redisTemplate.execute(new RedisCallback<User>() {
            public User doInRedis(RedisConnection connection) throws DataAccessException {
                byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id);
                if (connection.exists(key)) {
                	byte[] value = connection.get(key);
                	String name = redisTemplate.getStringSerializer().deserialize(value);
                	User user = new User();
                	user.setName(name);
                    user.setId(id);
                    return user;
                }
                return null;
            }
        });
    }

}
